package com.cxy.mapper;

import com.cxy.dto.SeeTaskDTO;
import com.cxy.dto.TaskInsertDTO;
import com.cxy.dto.UpdateTaskDTO;
import com.cxy.entity.Task;
import com.cxy.vo.TaskNoRelease;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDate;
import java.util.List;

@Mapper
public interface TaskMapper {


    void insert(TaskInsertDTO taskInsertDTO);

    /**
     * 查看任务（待发布）
     * @param seeTaskDTO
     * @return
     */
    List<TaskNoRelease> seeTaskNoRelease(SeeTaskDTO seeTaskDTO);

    /**
     * 根据id查询任务期数
     * @param id
     * @return
     */
    @Select("select *from task where id=#{id}")
    Task getById(Long id);

    /**
     * 修改任务
     * @param updateTaskDTO
     */
    void update(UpdateTaskDTO updateTaskDTO);

    /**
     * 查看任务（进行中）
     * @param seeTaskDTO
     * @return
     */
    Task selectTaskComplete(SeeTaskDTO seeTaskDTO);

    /**
     * 删除任务
     * @param id
     */
    @Delete("delete from task where id=#{id}")
    void delete(Long id);

    /**
     * 获取所有任务
     */
    @Select("select *from task")
    List<Task>selectAll();

    /**
     * 获取三期任务期数
     * @return
     */
    @Select("SELECT date_number FROM task where status=3 order by date_number desc  limit 3")
    List<String> getThreeDateNumber();

    /**
     * 根据期数获取id
     */
    @Select("select id from task where date_number in (#{dateNumber},#{dateNumber1},#{dateNumber3})")
    List<Long> getId(String dateNumber,String dateNumber1,String dateNumber3);

    /**
     * 获取当前正在进行中任务的期数
     */
    @Select("select date_number from task where status=2")
    String getDateNumber();

    /**
     * 通过上一季度的开始月和结束月获取上一季度的每一个期数
     */
    @Select("select date_number from task where date_number between #{startQuarter} and #{lastQuarter} and status=3")
    List<String>getFreshlySeason(LocalDate startQuarter , LocalDate lastQuarter);

    /**
     * 根据期数获得id
     * @param dateNumber
     * @return
     */
    @Select("select id from task where date_number=#{dateNumber}")
    Long getMonthId(String dateNumber);

    /**
     * 获得三条记录
     * @param dateNumbers
     * @return
     */
    List<Task> getThreeTask(List<String> dateNumbers);

    /**
     * 结束任务
     * @param id
     */
    @Update("update task set status=3 where id=#{id}")
    void overTask(Long id);
}
